package dataConfig

import (
	_ "github.com/go-sql-driver/mysql" //注册驱动器
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"kratos-realword/internal/conf"
	"kratos-realword/internal/pojo"
)

// NewMysqlDB mysql config
func NewMysqlDB(conf *conf.Data) *gorm.DB {

	db, err := gorm.Open(
		mysql.New(mysql.Config{
			DSN: conf.Database.Source,
			// string 类型字段的默认长度
			DefaultStringSize: 255,
			// 禁用 datetime 精度，MySQL 5.6 之前的数据库不支持
			DisableDatetimePrecision: true,
			// 重命名索引时采用删除并新建的方式，MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
			DontSupportRenameIndex: true,
			// 用 `change` 重命名列，MySQL 8 之前的数据库和 MariaDB 不支持重命名列
			DontSupportRenameColumn: true,
			// 根据当前 MySQL 版本自动配置
			SkipInitializeWithVersion: false,
		}), &gorm.Config{
			//禁止创建外键
			DisableForeignKeyConstraintWhenMigrating: true,
		})
	if err != nil {
		panic(err.Error())
	}
	InitDB(db)
	return db
}

func InitDB(db *gorm.DB) {
	err := db.
		Set("gorm:table_options", "ENGINE=InnoDB").
		Set("gorm:table_options", "CHARSET=utf8").
		AutoMigrate(&pojo.User{})
	if err != nil {
		panic(err.Error())
	}
}
